/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BaseDatos;

import BaseDatos.GeneradorMySQL.EquipoComputoMySQL;
import Controladores.GestorMensajes;
import Modelo.EquipoComputo;
import com.mysql.jdbc.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Marko
 */
public class GestorEquiposComputoBD{

////////////////////////////////////////////////////////////////////////////////
// Constructores
////////////////////////////////////////////////////////////////////////////////
    
    /**
     * constructor por defecto de la clase
     */
    public GestorEquiposComputoBD(){
        iniciarComponentes();
    }

////////////////////////////////////////////////////////////////////////////////
// Interfaz de la clase
////////////////////////////////////////////////////////////////////////////////

    /**
     * solicita el registro del equipo de computo en la base de datos
     * @param _nuevoEquipoComputo 
     */
    public void registrar(EquipoComputo _nuevoEquipoComputo){
        iniciarConexionBD();
        registrarEquipoComputoBD(_nuevoEquipoComputo);
    }
    
    /**
     * realiza la busqueda de un equipo de computo en especifico
     * @param _numInventario
     * @return 
     */
    public EquipoComputo buscarEquipo(String _numInventario){
        iniciarConexionBD();
        EquipoComputo equipoComputo = consultarEquipoComputo(_numInventario);
        return equipoComputo;
    }

    /**
     * realiza la busqueda de todos los equipos de computo registrados
     * @return Devuelve la lista de los equipos de computo
     */
    public ArrayList<EquipoComputo> buscarEquipos (){
        return null;
    }
    
////////////////////////////////////////////////////////////////////////////////
// Metodos Privados
////////////////////////////////////////////////////////////////////////////////
    
    /**
     * consulta la base de datos por el articulo solicitado, si lo encuentra devuelve
     * dihco articulo
     * @param _instruccionMySQL
     * @return 
     */
    private EquipoComputo consultarEquipoComputo(String _numInventario){
        EquipoComputo equipoComputo = null;
        EquipoComputoMySQL equipoComputoMySQL = new EquipoComputoMySQL();
        String instruccionMySQL = equipoComputoMySQL.consultaParticular(_numInventario);
        
        try {
            ResultSet ResultadoDeConsulta;
            ResultadoDeConsulta = adminSentenciasMySQL.executeQuery(instruccionMySQL);

            while(ResultadoDeConsulta.next()){
                equipoComputo = new EquipoComputo();
                    
                String numInventario = ResultadoDeConsulta.getString("NumInventario");
                equipoComputo.establecerNumInventario(numInventario);

                String articulo = ResultadoDeConsulta.getString("Articulo");
                equipoComputo.establecerNombreArticulo(articulo);

                String marca = ResultadoDeConsulta.getString("Marca");
                equipoComputo.establecerMarca(marca);

                String descripcion = ResultadoDeConsulta.getString("Descripcion");
                equipoComputo.establecerDescripcion(descripcion);
            }
        } catch (SQLException log) {
            GestorMensajes administradorMensajes = new GestorMensajes();
            administradorMensajes.mensajeError(log, _numInventario);
        } finally {
            terminarConexionBD();
        }
        return equipoComputo;
    }
    
    /**
     * Inicia una conexion con la base de datos
     */
    private void iniciarConexionBD(){
        GestorConexionBD conexionBD;
        conexionBD = GestorConexionBD.obtenerPermisosAdministradorConexion();
        adminSentenciasMySQL = conexionBD.abrirConexionBD();
    }

    /**
     * inicializa componentes y variables de la clase
     */
    private void iniciarComponentes(){
        adminSentenciasMySQL = null;
    }
    
    /**
     * Imprime si al ejecucion de la sentencia MySQL fue exitosa
     * @param entrada_Mensaje 
     */
    private void imprimirExitoSentenciaMySQL(String entrada_Mensaje){
        JOptionPane.showMessageDialog(null, entrada_Mensaje);
    }
    
    /**
     * registrael nuevo equipo de computo en la base de datos
     * @param _instruccionMySQL
     * @throws SQLException 
     */
    private void registrarEquipoComputoBD(EquipoComputo _nuevoEquipoComputo){
        EquipoComputoMySQL equipoComputoMySQL = new EquipoComputoMySQL();
        String instruccionMySQL = equipoComputoMySQL.registro(_nuevoEquipoComputo);
        try {
            adminSentenciasMySQL.executeUpdate(instruccionMySQL);
            imprimirExitoSentenciaMySQL("Alta de equipo computo exitosa");
        } catch (SQLException log) {
            GestorMensajes administradorMensajes = new GestorMensajes();
            administradorMensajes.mensajeError(log, "Nuevo Equipo Computo");
        } finally{
            terminarConexionBD();
        }
    }
    
    /**
     * termina la conexion con la base de datos
     */
    private void terminarConexionBD(){
        GestorConexionBD conexionBD;
        conexionBD = GestorConexionBD.obtenerPermisosAdministradorConexion();
        conexionBD.cerrarConexionBD();
    }
    
////////////////////////////////////////////////////////////////////////////////
// Declaracion de Variables
////////////////////////////////////////////////////////////////////////////////
    
    private Statement adminSentenciasMySQL;
}